home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / hold me in your arms / Nexus / nexus.software / magic.money < prev    next >
Internet Message Format  |  1994-05-22  |  14KB

  1. From: Sameer <sameer@soda.berkeley.edu>
  2. Subject: Magic Money and NexBucks
  3. To: nexus-gaia@netcom.com, hurst@mcs.com
  4. Date: Sat, 14 May 1994 05:01:25 -0700 (PDT)
  5.  
  6.     I have just now installed the Magic Money digital cash server
  7. on infiniy.hip (it will be called infinity.c2.org once the tlg link
  8. goes up), as the Nexus MagicBank <nexbucks@c2.org>.
  9.     The bank issues coins in denominations from 2^0, 2^1, up to 2^12.
  10.  
  11.     I think a good way to manage the money supply would be to
  12. create a coin of value 2^12 when a new nexus is created and give that
  13. coin to the nexus, for distribution as the nexus sees fit-- hopefully
  14. to those people who have worked hard to make the nexus happen.
  15.  
  16.     The money supply can grow slowly as the number of nexi in
  17. existance grows..
  18.  
  19.     Hopefully a setup like this will keep the money supply small
  20. enough so that the Magic Money tokens have some actual value, yet
  21. large enough so that there is enough money to go around. I'm including
  22. the documentation to magic money. To send requests to the server mail
  23. nexbucks@infinity.hip.berkeley.edu (it will be nexbucks@c2.org soon)
  24. and then the server's output will be mailed back to you.
  25.     (No nexi are up yet, so the money supply is nil though. [well
  26. except for '1', which I minted as a test.])
  27.  
  28.     What do people think of the scheme?
  29.  
  30. --
  31.  
  32. You will also need these files from the PGP Tools library, which should
  33. be available from csn.org or wherever you downloaded this.
  34.  
  35. FIFO.H          FIFO.C          IDEA.C          IDEA.H          MD5.H
  36. MD5.C           MPILIB.H        MPILIB.C        PGPARMOR.H      PGPARMOR.C
  37. PGPKGEN.C       PGPKGEN.H       PGPKMGT.H       PGPKMGT.C       PGPMEM.H
  38. PGPMEM.C        PGPTOOLS.C      PGPTOOLS.H      PLATFORM.H      SYSTEM.H
  39. USUALS.H    
  40.  
  41. Magic Money Digital Cash System
  42. Brought To You By Pr0duct Cypher
  43. Based on PGP Tools - The Crypto Construction Set
  44.  
  45. Magic Money is a digital cash system designed for use over electronic mail.
  46. The system is online and untraceable. Online means that each transaction
  47. involves an exchange with a server, to prevent double-spending. Untraceable
  48. means that it is impossible for anyone to trace transactions, or to match
  49. a withdrawal with a deposit, or to match two coins in any way.
  50.  
  51. The system consists of two modules, the server and the client. Magic Money
  52. uses the PGP ascii-armored message format for all communication between the
  53. server and client. All traffic is encrypted, and messages from the server
  54. to the client are signed. Untraceability is provided by a Chaum-style blind
  55. signature. Note that the blind signature is patented, as is RSA. Using it
  56. for experimental purposes only shouldn't get you in trouble.
  57.  
  58. Digicash is represented by discrete coins, the denominations of which are
  59. chosen by the server operator. Coins are RSA-signed, with a different e/d
  60. pair for each denomination. The server does not store any money. All coins
  61. are stored by the client module. The server accepts old coins and blind-
  62. signs new coins, and checks off the old ones on a spent list.
  63.  
  64. Suppose Alice wants to pay Bob some Magic Money. Alice uses her client
  65. module to extract some coins from her account (file). She then mails those
  66. coins to Bob, using a secure channel such as a PGP message. Bob runs his
  67. client module on the coins. The client module checks the signatures, and
  68. totals up the value of the coins. 
  69.  
  70. It then prompts Bob to choose the values of new coins which total the same
  71. value as the old ones. For example, Alice sends Bob a 64-unit coin. Bob
  72. chooses a 32-unit and two 16-unit coins. The client module then generates
  73. proto-coins, which are blinded but unsigned. It produces an output file
  74. containing Alice's coins, and the new proto-coins.
  75.  
  76. Bob mails this to the server. The server counts up Alice's coins, checks
  77. their signatures, and checks for double-spending. It puts the coins on the
  78. cancelled list, signs the proto-coins, and mails them back to Bob. Bob runs
  79. his client module on the reply message. It unblinds the signed coins and
  80. adds them to his coin file. This completes the transfer.
  81.  
  82. The Magic Money server is a filter, accepting input from stdin and sending
  83. output to stdout. To set up a server, you first compile the server program
  84. and install it in its own directory. Dump some random junk in a file called
  85. rand.dat. This and the system clock is hashed to generate random numbers.
  86.  
  87. Then execute "s i" to initialize the server. It will prompt you for some
  88. information. For the denominations, I would use powers of 2 (1, 2, 4, 8,
  89. 16, 32, 64, 128...) because they minimize the number of coins needed to
  90. transfer any amount. The server will create a key and an e/d list. An
  91. ascii-armored copy of the server's public key is written to bank.asc. Users
  92. must have this key to use the server, so however you publicize your server,
  93. include the key.
  94.  
  95. Set up the system so that, when a message comes in, the server is executed
  96. and the message (which need not be cleaned up first) is piped into stdin.
  97. The output from the server should be mailed back to the user. The server
  98. can be run through a remailer, if you don't want to reveal your location.
  99. This would be easiest through a penet-style remailer. Operating through a
  100. cypherpunks-style remailer would require an external mechanism to handle
  101. reply headers. However you do it, just see to it that messages go into the
  102. server and the output goes back to the right user.
  103.  
  104. If you just want to experiment on one machine, put the server and client in
  105. different directories, to prevent their files from interfering with each
  106. other. Set up a shell script/batch file to feed the client's output into
  107. the server and return the server's reply.
  108.  
  109. The server has the ability to include a message to the client. If the file
  110. msg.txt exists in the server's directory, it will be included in the
  111. server's replies, and the clients will display it. The client will wait for
  112. a keypress after displaying the message, so the last line should be "press
  113. any key to continue" or something similar. The message should not be longer
  114. than one screen, because there is no "more" in the client. The main use for
  115. the message is to warn users of expirations (see below), but you can send
  116. anything you want.
  117.  
  118. To set up a client, compile the client module (unless the server operator
  119. was nice enough to provide a binary [hint]) and put it in its own
  120. directory. Put some random junk (for random numbers) into rand.dat, and put
  121. the server's ascii-armored key in bank.asc. Now execute "c -i" to
  122. initialize your client. It will create a key and generate "output.asc"
  123. which should be mailed to the server. When the reply comes back, save it
  124. in a file and run "c <file>". This will initialize your e-list and coin
  125. name files. If the server has a msg.txt, you will see it.
  126.  
  127. Now get another user to send you some coins. Coins are binary, not ascii-
  128. armored, because we assume you will use a PGP message or other "envelope"
  129. to transport them. Execute "c <file>" to process your coins. The client
  130. will show the denominations as the signatures are checked. It will show the
  131. total, and allow you to choose denominations for the new coins you want to
  132. generate. Then it will generate a file "output.asc" which should be mailed
  133. to the server. Take the server's reply and run "c <file>" on it. It will
  134. extract and unblind the coins, displaying them as it does so. When it is
  135. done, you will have some coins to spend.
  136.  
  137. To pay someone some coins, execute "c -p". The client will show a list of
  138. coins you have, and allow you to choose values to extract. These will be
  139. copied into "coins.dat", which you then mail to the person you want to pay.
  140. He does as above to deposit them. Do not lose "coins.dat" because the coins
  141. are removed from your file as they are extracted.
  142.  
  143. Server maintenance and expirations: the server must keep track of all the
  144. coins which have ever been spent, at 16 bytes each. While the server uses
  145. an efficient hash file to maintain speed, the file will eventually grow to
  146. consume the entire filesystem of the host machine. There must be a way to
  147. clear it out eventually.
  148.  
  149. The server operator executes "s n" to generate a new e/d list. The old list
  150. will be renamed. Old coins are still valid at this point. The server
  151. operator should put up a message warning users to exchange their old coins.
  152. The next time a user interacts with the server, his elist will be updated
  153. automatically, and the old one renamed. 
  154.  
  155. The user can (and should be warned to) execute "c -x" to automatically
  156. exchange all his old coins for new ones. After a reasonable time, and
  157. plenty of warning (!) the server operator executes "s d" to delete the old
  158. spent list, efile, and dfile. Old coins are now worthless. The next time
  159. a user interacts with the server, his old elist will be deleted
  160. automatically by his client. Old coins will now show up as having zero
  161. value, and a "c -x" will discard them as "expired coins". If the user was
  162. dumb enough not to exchange his coins, too bad.
  163.  
  164. The server will only sign as much value as it receives, so the amount of
  165. money in circulation remains constant. We have a chicken-and-egg problem:
  166. how is value created? The server operator has the magical ability to create
  167. new coins from thin air. He executes "s m <x> <x> <x>" where x is the
  168. denomination of the coins he wants. The result is a coins.dat file, which
  169. can be mailed to a user and processed by his client module. The server just
  170. signs the coins directly, without any blinding.
  171.  
  172. Coins are represented by RSA integers in the normal PGP-signature format.
  173. The coin is 16 bytes, padded in the same way that PGP 2.3a pads a
  174. signature. The coin is stored signed, that is, raised to the d power. There
  175. is no hashing involved; RSA is used directly.
  176.  
  177. To blind a coin, the client generates a blinding factor, a large random
  178. number. The random number is raised to the appropriate e power, modulo the
  179. server's n. It is then multiplied with the unsigned coin, generating a
  180. blinded "proto-coin", which is sent to the server. The server signs the
  181. blinded coin by raising to the power d. This "decrypts" the blinding factor
  182. at the same time as it signs the coin, because RSA is multiplicative. Then
  183. the client divides out the blinding factor, leaving the signed coin.
  184.  
  185. How big should the blinding factor be? I am not sure. Right now, it is set
  186. to the modulus minus one byte. This is certainly secure, but it takes a
  187. long time to unblind because mp_inv is a slow operation. If you know how
  188. long it needs to be, feel free to change it.
  189.  
  190. Now, if you're still awake, comes the fun part: how do you introduce real
  191. value into your digicash system? How, for that matter, do you even get
  192. people to play with it?
  193.  
  194. What makes gold valuable? It has some useful properties: it is a good
  195. conductor, is resistant to corrosion and chemicals, etc. But those have
  196. only recently become important. Why has gold been valuable for thousands
  197. of years? It's pretty, it's shiny, and most importantly, it is scarce.
  198.  
  199. Digicash is pretty and shiny. People have been talking about it for years,
  200. but few have actually used it. You can make your cash more interesting by
  201. giving your server a provocative name. Running it through a remailer could
  202. give it an 'underground' feel, which would attract people.
  203.  
  204. Your digicash should be scarce. Don't give it away in large quantities. Get
  205. some people to play with your server, passing coins back and forth. Have
  206. a contest - the first person who (breaks this code, answers this question,
  207. etc.) wins some digital money. Once people start getting interested, your
  208. digital money will be in demand. Make sure demand always exceeds supply. 
  209.  
  210. If some people get servers up and running, and if there is any interest,
  211. I can write an automatic client which will accept and pay out Magic Money
  212. without human intervention. Please let me know if you have an application
  213. for this, or any other ideas for the system.
  214.  
  215.                                               Pr0duct Cypher
  216.  
  217. From: mac18@cus.cam.ac.uk (Sparky)
  218. Subject: Re: Magic Money and NexBucks
  219. To: sameer@soda.berkeley.edu (Sameer)
  220. Date: Sun, 15 May 1994 02:00:43 +0100 (BST)
  221. Cc: nexus-gaia@netcom.com (Nexus Gaia)
  222. In-Reply-To: <199405142124.OAA14948@soda.berkeley.edu> from "Sameer" at
  223.   May 14, 94 02:24:48 pm
  224.  
  225.     Ive thought and Im back. As Dave says the credits have to have worth,
  226. I can provide that by making them equivalent to online time. Its easy
  227. to imagine a currency building up as people sell virtual items and services
  228. in return for online time and I can give people wages for putting work into
  229. the system maintaining things.
  230.     It would be really nice to interface this into the MUD. The potential
  231. for virtual gadget shops etc is there. Ive been thinking how to do it and
  232. it would be easy to set up a virtual bank in the MUD to buy credits, but
  233. transferring them into the MUD will be tricky. I can't see a way for the
  234. MUD to transfer the money across from the ecafe (its on a seperate system)
  235. when they login. I don't want people to have their credits split over
  236. two systems it'll confuse people terribly.
  237.     At this stage its getting to the point where I ask 'am I breaking
  238. the law'. Am I effectivly printing my own currency? I can effectivly get
  239. something for nothing out of this deal. I can employ a kid to help out in
  240. the Cafe when it gets busy and pay him in virtual credits, which are worth
  241. something to him but only worth something to me if he gets the last terminal
  242. in the place.
  243.     When you get the system running Sameer drop me a line and I'll
  244. patch a HTML interface onto the front. The MUD stuff will be tricker - theres
  245. a whole load of problems which make it very tricky.
  246.  
  247. -Mark
  248. -- 
  249. _   /\/|  _   _   /  _  Email:  mac18@cus.cam.ac.uk        IRC: Brandoch
  250.    /   |_( /_/ '_/7     SnailMail: 363 Kings College, Cambridge, England 
  251. Mark Cheverton     \_)  Battle PBeM: finger battle@cygnus.cp.tn.tudelft.nl
  252. Electronic Cafe: http://www.cp.tn.tudelft.nl/~battle/mark/ecafe/ecafe.html
  253.  
  254.